API Gateway を呼び出す Step Functions でステートマシン保存失敗を回避するには
困っていた内容
API Gateway を呼び出す Step Functions の構築で、ステートマシンの保存が失敗しました。
HTTP ヘッダーの値が原因のようですが、Lambda オーソライザーのサンプル値(secretToken
)でも失敗します。 ステートマシンの保存に成功するにはどうしたら良いでしょうか?
ステートマシンの定義に Amazon ステート言語エラーがあります。エラーを修正して続行してください。 The 'Headers' field contains unsupported values: [authorization] /States/API Gateway Invoke/Parameters For more information, see Amazon States Language
どう対応すればいいの?
HTTP ヘッダー名(例:Authorization
)を確認してください。
Step Functions の API Gateway 呼び出しでは追加の HTTP ヘッダーが設定可能です。ただし、2023年10月時点で、次の HTTP ヘッダー名はセキュリティの理由から設定できません。
Step Functions を使用して API Gateway を呼び出し - AWS Step Functions
- X-Forwarded、X-Amz、またはX-Amznのプレフィックスが付いているキー。
- Authorization
- Connection
- Content-md5
- Expect
- Host
- Max-Forwards
- Proxy-Authenticate
- Server
- TE
- Transfer-Encoding
- Trailer
- Upgrade
- Via
- Www-Authenticate
そのため、使用できない HTTP ヘッダー名を定義していないか確認し、必要に応じて HTTP ヘッダー名を変更してください。
なお、HTTP API の Lambda オーソライザーではドキュメントのサンプルコードで構築した場合、ヘッダー名にAuthorization
を使用しますが、ヘッダー名は変更できます。
変更する際は、API Gateway の ID ソースと
Lambda のコード変更(13行目)の二つが必要ですので、ご注意ください。
export const handler = async(event) => { let response = { "isAuthorized": false, "context": { "stringKey": "value", "numberKey": 1, "booleanKey": true, "arrayKey": ["value1", "value2"], "mapKey": {"value1": "value2"} } }; if (event.headers.hatoauth === "secretToken") { response = { "isAuthorized": true, "context": { "stringKey": "value", "numberKey": 1, "booleanKey": true, "arrayKey": ["value1", "value2"], "mapKey": {"value1": "value2"} } }; } return response; };
参考資料
- HTTP API の AWS Lambda オーソライザーの使用 - Amazon API Gateway
オプションで、Lambda オーソライザーの ID ソースを指定できます。ID ソースは、リクエストを認可するために必要なデータの場所を指定します。例えば、ヘッダーまたはクエリ文字列の値を ID ソースとして指定できます。
- [アップデート]API GWのHTTP APIでIAMによる認可とLambdaオーソライザーが利用可能になりました | DevelopersIO